package com.Reporte_Venta;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.ExecutionException;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.SeriesSelection;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.Generales.R;


import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.ClasesGraficas.VentasN1;
import com.ClasesGraficas.VentasN2;
import com.ClasesGraficas.VentasN2v2;
import com.ClasesGraficas.VentasN3;
import com.Generales.login;
import com.JSON.JSONParser_Final;
import com.Reporte_Evolutivo.RE_1_Tipo_Eventos;

public class Venta_Canal extends Activity {

	/*** JASON ***/
	private static String urlVentasAnuales = "http://200.16.7.112:3000/reports_management/report/ventasAnualesCanal";
	private static String urlVentasMensuales = "http://200.16.7.112:3000/reports_management/report/ventasMensualesCanal";
	private static String urlVentasTrimestrales = "http://200.16.7.112:3000/reports_management/report/ventasTrimestralesCanal";
	private JSONArray auxJson = null;
	
	/*** GRAFICA ***/
	GraphicalView mChartView = null;
	LinearLayout layoutGrafica = null;
	String tituloGrafica = "";
	List<String> titulosX = null;
	List<double[]> ventas = null;
	List<Venta> regVenta = null;
	
	/*** TERCER NIVEL ***/
	private Intent intCanalN3 = null; //Se inicializar en la funcion inicializaFlag
	private String [] canales;
	private String periodo;
	private String canal;
	private int idcanal;
	
	/*** INTENTS NIVELES ***/
	private Intent intVentasGenerales = null; //Se inicializar en la funcion inicializaFlag
	private Intent intTipoEvento = null; //Se inicializar en la funcion inicializaFlag
	private Intent intEdad = null; //Se inicializar en la funcion inicializaFlag
	private Intent intPromotor = null; //Se inicializar en la funcion inicializaFlag
	private Intent intGenero = null; //Se inicializar en la funcion inicializaFlag
	private Intent intDistrito = null; //Se inicializar en la funcion inicializaFlag
	private AlertDialog.Builder tipoNivel = null; //Se inicializa al seleccionar la grafica para generar el otro nivel
	
	/*** CONSTANTES DE ACTIVITY *****/
	private static final int CANAL_N2 = 1;
	private static final int CANAL_N3 = 2;
	private static final int VENTAS_GENERALES = 3;
	private static final int TIPO_EVENTO = 4;
	private static final int EDAD = 5;
	private static final int PROMOTOR = 6;
	private static final int GENERO = 7;
	private static final int DISTRITO = 8;
	
	/*** FALGS o PARAMETROS ***/
	public int flagGenerarReporte = 0;
	public int flagTiempo = 0; // 1=mes && 2=trimenstre && 3=anno
	public int flagLima = 0;
	public int flagProvincia = 0;
	public int flagNivel=0; 
	
	private Button pickDateInicio;
    private int anhoInicio;
    private int mesInicio;
    private int diaInicio;
    
    private Button pickDateFin;
    private int anhoFin;
    private int mesFin;
    private int diaFin;
    
    private TextView fechaInicio;
    private TextView fechaFin;
    private View view;
    
    static final int DATE_DIALOG_Inicial = 0;
    static final int DATE_DIALOG_Final = 1;
    
    private String idUsuario;
    private String nombreUser;
    private int idperfil;
	
	/**
	 * @see android.app.Activity#onCreate(Bundle)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.ventas);
		
		this.inicializaFlagCanal();
		
		nombreUser = this.getIntent().getExtras().getString("nombreUser");
		idUsuario = this.getIntent().getExtras().getString("idUsuario");
		idperfil = this.getIntent().getExtras().getInt("idperfil");
		
		/*** ACTION BAR ***/
		Resources res = getResources();
		Drawable myImage = res.getDrawable(R.drawable.background2);		
		ActionBar actionBar = this.getActionBar();
		actionBar.setBackgroundDrawable(myImage);
		actionBar.setDisplayUseLogoEnabled(true);
		actionBar.setDisplayShowTitleEnabled(true);
		actionBar.setTitle(nombreUser);
		
		/*** DISENO DE LA PANTALLA ***/
		setColorTiempo();
		setColorUbicacion();
		
		this.incializaFecha();
		
		GenerarReporte(view);
	}
	
	public void GenerarReporte(View view)
	{
		int numeroInicial = anhoInicio*10000+mesInicio*100+diaInicio;
		int numeroFinal = anhoFin*10000+mesFin*100+diaFin;
		
		if (( ( flagProvincia == 0 && flagLima==0) || flagTiempo == 0)== false)
		{
			if(numeroFinal>=numeroInicial)
			{
				if (flagNivel==0)
				{
					this.incializaFlags(VENTAS_GENERALES);
					Toast.makeText(this, "Se genera el reporte por Ventas Generales	", Toast.LENGTH_LONG).show();
				    startActivity(intVentasGenerales);
				}
				
				if (flagNivel==1)
				{
					this.incializaFlags(PROMOTOR);
					Toast.makeText(this, "Se genera el reporte por Promotor", Toast.LENGTH_LONG).show();
					startActivity(intPromotor);
				}
				
				if (flagNivel==2)
				{
					this.incializaFlags(TIPO_EVENTO);
					Toast.makeText(this, "Se genera el reporte por Tipo de Evento", Toast.LENGTH_LONG).show();
					startActivity(intTipoEvento);
				}
				
				if (flagNivel==3)
				{
					this.incializaFlags(EDAD);
					Toast.makeText(this, "Se genera el reporte por Edad", Toast.LENGTH_LONG).show();
				    startActivity(intEdad);
				}
				
				if (flagNivel==4)
				{
					int flagTipoReporte = 3; //ANOS
					String ubicacion = "";
					if (flagLima == 1 && flagProvincia != 1)
						ubicacion = "lima";
					if (flagLima != 1 && flagProvincia == 1)
						ubicacion = "provincias";
					
					VentasN2v2 ventasCanal = new VentasN2v2();
					
					if (flagTiempo == 3) //ANUAL
					{
						String url = urlVentasAnuales;
						if (ubicacion.equals(""))
							url += "Ambos/";
						else
							url += "/";
						url += anhoInicio + "/" + anhoFin;
						if (ubicacion.equals(""))
							url +=  ".json";
						else
							url += "/" + ubicacion + ".json";
						auxJson = returnJnConsultas(url);
						if (auxJson != null)
						{
							if (auxJson.length() != 0)
							{
								leerJsonA();
								if (anhoFin == anhoInicio)
									this.tituloGrafica = "Ventas Totales por Canal " + anhoFin;
								else
									this.tituloGrafica = "Ventas Totales por Canal " + anhoInicio + "-" + anhoFin;
									
								ventasCanal.setTituloChart(tituloGrafica);
								ventasCanal.ejecutar(ventas, canales,flagTipoReporte,titulosX);
								ocultaPanel();
								
								this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
								this.mChartView = ChartFactory.getBarChartView(this,ventasCanal.getDataset(), 
										ventasCanal.getmRenderer(),Type.DEFAULT);
								layoutGrafica.removeAllViews();
							    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
								               LayoutParams.FILL_PARENT));
								
								Toast.makeText(this, "Se genera el reporte por canal", Toast.LENGTH_SHORT).show();
								Toast.makeText(this, "Para obtener mayor informacion presionar una barra", Toast.LENGTH_LONG).show();
								
								/*** PINTADO DE BOTONES LUEGO DE GENERAR LA GRAFICA ***/
								this.incializaFlags(CANAL_N2);
								this.setColorNivel();
								this.setColorTiempo();
								this.setColorUbicacion();
	
								/*** PARAMETROS PARA EL TERCER NIVEL ***/
								this.mChartView.setOnClickListener(new View.OnClickListener()
								{
									@Override
									public void onClick(View arg0)
									{
										SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
										if (seriesSelection != null)
										{
											int a = seriesSelection.getSeriesIndex();
											canal = canales[a];
											idcanal = getIdbyName(canal);
											int x = (int) seriesSelection.getXValue();
											periodo = titulosX.get(x-1);
											Venta_Canal.this.crearDialog();
											tipoNivel.show();
										}
									}
								});
							} else Toast.makeText(this, "No hay datos para mostrar", Toast.LENGTH_LONG).show();
						} else Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
					}
					
					if (flagTiempo == 1) //Mensual
					{
						flagTipoReporte = 1; //MES
						String url = urlVentasMensuales;
						if (ubicacion.equals(""))
							url += "Ambos/";
						else
							url += "/";
						url += anhoInicio + "-" + (mesInicio +1) + "-" + diaInicio + "/";
						url += anhoFin + "-" + (mesFin + 1) + "-" + diaFin;
						if (ubicacion.equals(""))
							url +=  ".json";
						else
							url += "/" + ubicacion + ".json";
						auxJson = returnJnConsultas(url);
						
						if (auxJson != null)
						{
							if (auxJson.length() != 0)
							{
								leerJsonM();
								if (anhoFin == anhoInicio && mesInicio == mesFin)
									this.tituloGrafica = "Ventas Totales del " + (mesInicio + 1) + "-" + anhoInicio;
								else
									this.tituloGrafica = "Ventas Totales " + (mesInicio + 1) + "/" + anhoInicio + " - " + (mesFin + 1) + "/" + anhoFin;
									
								ventasCanal.setTituloChart(tituloGrafica);
								ventasCanal.ejecutar(ventas, canales,flagTipoReporte,titulosX);
								ocultaPanel();
								
								this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
								this.mChartView = ChartFactory.getBarChartView(this,ventasCanal.getDataset(), 
										ventasCanal.getmRenderer(),Type.DEFAULT);
								layoutGrafica.removeAllViews();
							    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
								               LayoutParams.FILL_PARENT));
								
								Toast.makeText(this, "Se genera el reporte por canal", Toast.LENGTH_SHORT).show();
								Toast.makeText(this, "Para obtener mayor informacion presionar una barra", Toast.LENGTH_LONG).show();
								
								/*** PINTADO DE BOTONES LUEGO DE GENERAR LA GRAFICA ***/
								this.incializaFlags(CANAL_N2);
								this.setColorNivel();
								this.setColorTiempo();
								this.setColorUbicacion();
								
								/*** PARAMETROS PARA EL TERCER NIVEL ***/
								this.mChartView.setOnClickListener(new View.OnClickListener()
								{
									@Override
									public void onClick(View arg0)
									{
										SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
										if (seriesSelection != null) //Solo nos interesa cuando se selecciona una linea
										{
											int a = seriesSelection.getSeriesIndex();
											canal = canales[a];
											idcanal = getIdbyName(canal);
											int x = (int) seriesSelection.getXValue();
											periodo = titulosX.get(x-1);
											Venta_Canal.this.crearDialog(); //Creamos el dialgo en caso se use
											tipoNivel.show();//Nos sirve para obtener que tipo de nivel queremo
										}
									}
								});
							}
							else Toast.makeText(this, "No hay datos para mostrar", Toast.LENGTH_LONG).show();
						}else Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
					}
					
					if (flagTiempo == 2) //Trimestral
					{
						flagTipoReporte = 2; //Trimestres
						String url = urlVentasTrimestrales;
						if (ubicacion.equals(""))
							url += "Ambos/";
						else
							url += "/";
						url += anhoInicio + "-" + (mesInicio +1) + "-" + diaInicio + "/";
						url += anhoFin + "-" + (mesFin + 1) + "-" + diaFin;
						if (ubicacion.equals(""))
							url +=  ".json";
						else
							url += "/" + ubicacion + ".json";
						auxJson = returnJnConsultas(url);
						
						if (auxJson != null)
						{
							if (auxJson.length() != 0)
							{
								leerJsonT();
								if (anhoFin == anhoInicio && mesInicio == mesFin)
									this.tituloGrafica = "Ventas Totales del " + (mesInicio + 1) + "-" + anhoInicio;
								else
									this.tituloGrafica = "Ventas Totales " + (mesInicio + 1) + "/" + anhoInicio + " - " + (mesFin + 1) + "/" + anhoFin;
									
								ventasCanal.setTituloChart(tituloGrafica);
								ventasCanal.ejecutar(ventas, canales,flagTipoReporte,titulosX);
								ocultaPanel();
								
								this.layoutGrafica = (LinearLayout)findViewById(R.id.idpanelgraficoventa);
								this.mChartView = ChartFactory.getBarChartView(this,ventasCanal.getDataset(), 
										ventasCanal.getmRenderer(),Type.DEFAULT);
								layoutGrafica.removeAllViews();
							    layoutGrafica.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
								               LayoutParams.FILL_PARENT));
								
								Toast.makeText(this, "Se genera el reporte por canal", Toast.LENGTH_SHORT).show();
								Toast.makeText(this, "Para obtener mayor informacion presionar una barra", Toast.LENGTH_LONG).show();
								
								/*** PINTADO DE BOTONES LUEGO DE GENERAR LA GRAFICA ***/
								this.incializaFlags(CANAL_N2);
								this.setColorNivel();
								this.setColorTiempo();
								this.setColorUbicacion();
								
								/*** PARAMETROS PARA EL TERCER NIVEL ***/
								this.mChartView.setOnClickListener(new View.OnClickListener()
								{
									@Override
									public void onClick(View arg0)
									{
										SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
										if (seriesSelection != null) //Solo nos interesa cuando se selecciona una linea
										{
											int a = seriesSelection.getSeriesIndex();
											canal = canales[a];
											idcanal = getIdbyName(canal);
											int x = (int) seriesSelection.getXValue();
											periodo = titulosX.get(x-1);
											Venta_Canal.this.crearDialog(); //Creamos el dialgo en caso se use
											tipoNivel.show();//Nos sirve para obtener que tipo de nivel queremo
										}
									}
								});
							}
							else Toast.makeText(this, "No hay datos para mostrar", Toast.LENGTH_LONG).show();
						}else Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
					}
				}
				
				if (flagNivel==5)
				{
					this.incializaFlags(GENERO);
					Toast.makeText(this, "Se genera el reporte por Genero", Toast.LENGTH_LONG).show();
				    startActivity(intGenero);
				}
				
				if (flagNivel==6)
				{
					this.incializaFlags(DISTRITO);
					Toast.makeText(this, "Se genera el reporte por Distrito", Toast.LENGTH_LONG).show();
				    startActivity(intDistrito);
				}
			}
			else
				Toast.makeText(this, "La Fecha Final no puede ser menor a la Fecha Inicial", Toast.LENGTH_LONG).show();
		}	
		else
			Toast.makeText(this, "Debe seleccionar el periodo y la ubicacion", Toast.LENGTH_LONG).show();		
	}

	private void leerJsonA()
	{
		regVenta = new ArrayList<Venta>();

		try
		{
			for (int i = 0; i < auxJson.length(); i++)
			{
				Venta auxVenta = new Venta();
				JSONObject jsonItem = auxJson.getJSONObject(i);
		        JSONObject jsonItem1 = jsonItem.getJSONObject("fact_venta");
		        
		        auxVenta.setAnho(jsonItem1.getInt("Anho"));
		        auxVenta.setMonto(jsonItem1.getDouble("Monto"));
		        auxVenta.setIdCanal(jsonItem1.getInt("idcanal"));
		        auxVenta.setNomCanal(jsonItem1.getString("nomcanal"));
		        
		        regVenta.add(auxVenta);
			}
			
			setCanals();
			setTitulosXA();
			setMonto();

		}catch (JSONException e) { e.printStackTrace();}
	}
	
	private void leerJsonM() 
	{
		regVenta = new ArrayList<Venta>();

		try
		{
			for (int i = 0; i < auxJson.length(); i++)
			{
				Venta auxVenta = new Venta();
				JSONObject jsonItem = auxJson.getJSONObject(i);
		        JSONObject jsonItem1 = jsonItem.getJSONObject("fact_venta");
		        
		        auxVenta.setAnho(jsonItem1.getInt("Anho"));
		        auxVenta.setMonto(jsonItem1.getDouble("Monto"));
		        auxVenta.setMes(jsonItem1.getInt("Mes"));
		        auxVenta.setNomMes(jsonItem1.getString("nomMes"));
		        auxVenta.setIdCanal(jsonItem1.getInt("idcanal"));
		        auxVenta.setNomCanal(jsonItem1.getString("nomcanal"));
		        
		        regVenta.add(auxVenta);
			}
			
			setCanals();
			setTitulosXM();
			setMonto();

		}catch (JSONException e) { e.printStackTrace();}
	}
	
	private void leerJsonT() 
	{
		regVenta = new ArrayList<Venta>();

		try
		{
			for (int i = 0; i < auxJson.length(); i++)
			{
				Venta auxVenta = new Venta();
				JSONObject jsonItem = auxJson.getJSONObject(i);
		        JSONObject jsonItem1 = jsonItem.getJSONObject("fact_venta");
		        
		        auxVenta.setAnho(jsonItem1.getInt("Anho"));
		        auxVenta.setMonto(jsonItem1.getDouble("Monto"));
		        auxVenta.setTrimestre(jsonItem1.getInt("Trimestre"));
		        auxVenta.setIdCanal(jsonItem1.getInt("idcanal"));
		        auxVenta.setNomCanal(jsonItem1.getString("nomcanal"));
		        
		        regVenta.add(auxVenta);
			}
			
			setCanals();
			setTitulosXT();
			setMonto();

		}catch (JSONException e) { e.printStackTrace();}
	}
	
	private void setCanals() 
	{
		List<String> auxCanales = new ArrayList<String>();
		Venta auxVenta = regVenta.get(0);
		
		String canal = auxVenta.getNomCanal();
		auxCanales.add(canal);
		for(int i=1;i<regVenta.size();i++)
		{
			auxVenta = regVenta.get(i);
			String p = auxVenta.getNomCanal();
			
			if(!p.equals(canal))
			{
				canal = p;
				auxCanales.add(canal);
			}
		}
		
		this.canales = new String[auxCanales.size()];
		for(int i=0;i<auxCanales.size();i++)
			this.canales[i] = auxCanales.get(i);
	}
	
	private void setTitulosXA()
	{
		this.titulosX = new ArrayList<String>();
		
		Venta auxVenta = regVenta.get(0);
		String canal = auxVenta.getNomCanal();
		titulosX.add(auxVenta.getAnho()+"");
		
		for(int i=1;i<regVenta.size();i++)
		{
			auxVenta = regVenta.get(i);
			String p = auxVenta.getNomCanal();
			
			if(p.equals(canal))
				titulosX.add(auxVenta.getAnho()+"");
			else
				break;
		}
	}
	
	private void setTitulosXM()
	{
		this.titulosX = new ArrayList<String>();
		
		Venta auxVenta = regVenta.get(0);
		String canal = auxVenta.getNomCanal();
		titulosX.add(auxVenta.getNomMes());
		
		for(int i=1;i<regVenta.size();i++)
		{
			auxVenta = regVenta.get(i);
			String p = auxVenta.getNomCanal();
			
			if(p.equals(canal))
				titulosX.add(auxVenta.getNomMes());
			else
				break;
		}
	}
	
	private void setTitulosXT()
	{
		this.titulosX = new ArrayList<String>();
		
		Venta auxVenta = regVenta.get(0);
		String canal = auxVenta.getNomCanal();
		titulosX.add(auxVenta.getTrimestre() + "/" + auxVenta.getAnho());
		
		for(int i=1;i<regVenta.size();i++)
		{
			auxVenta = regVenta.get(i);
			String p = auxVenta.getNomCanal();
			
			if(p.equals(canal))
				titulosX.add(auxVenta.getTrimestre() + "/" + auxVenta.getAnho());
			else
				break;
		}
	}
	
	private void setMonto() 
	{
		double[] auxMonto = null;
		ventas = new ArrayList<double[]>();
		
		for(int i=0;i<canales.length;i++)
		{
			auxMonto = dameVentasP(canales[i]);
			ventas.add(auxMonto);
		}
	}

	private double[] dameVentasP(String canal)
	{
		double[] auxMonto = null;
		
		if (titulosX.size() == 1)
		{
			auxMonto = new double[this.titulosX.size()+1];
			Venta auxVenta = null;
			int cont = 0;
			
			for(int i=0;i<regVenta.size();i++)
			{
				auxVenta = regVenta.get(i);
				String p = auxVenta.getNomCanal();
				
				if(p.equals(canal))
				{
					auxMonto[cont] = auxVenta.getMonto();
					cont++;
					if (cont == titulosX.size())
					{
						auxMonto[cont] = 0;
						break;
					}
				}
					
			}
		}
		else
		{
			auxMonto = new double[this.titulosX.size()];
			Venta auxVenta = null;
			int cont = 0;
			
			for(int i=0;i<regVenta.size();i++)
			{
				auxVenta = regVenta.get(i);
				String p = auxVenta.getNomCanal();
				
				if(p.equals(canal))
				{
					auxMonto[cont] = auxVenta.getMonto();
					cont++;
					if (cont == titulosX.size())
						break;
				}
					
			}
		}
		
		return auxMonto;
	}

	private void ocultaPanel()
	{
		LinearLayout ll7 = (LinearLayout)findViewById(R.id.lytOpciones);
		ll7.setVisibility(View.GONE);
	}
		
	private void muestraPanel()
	{
		LinearLayout ll7 = (LinearLayout)findViewById(R.id.lytOpciones);
		
		if (ll7.getVisibility() == View.VISIBLE)
			ll7.setVisibility(View.GONE);
		else if(ll7.getVisibility() == View.GONE)
			ll7.setVisibility(View.VISIBLE);
	}
	
	private int getIdbyName(String canal)
	{
		Venta auxVenta = null;
		int id = 0;
		for (int i=0;i<regVenta.size();i++)
		{
			auxVenta = regVenta.get(i);
			if(auxVenta.getNomCanal().equals(canal))
			{
				id = auxVenta.getIdCanal();
				break;
			}
		}
		return id;
	}

	/***METODOS DEL JSON****/
	
	private JSONArray returnJnConsultas(String url) {
		JSONArray array = null;
		try {
			array = (new JSONParser_Final().execute(url)).get(); //SE OBTIENE LOS OBJ DEL JSON
		} catch (Exception e) {
			Toast.makeText(this, "Problemas con la conexion", Toast.LENGTH_LONG).show();
		}
		return array;
	}
	
	public void setColorTiempo(){
		
		Button buttonMensuales = (Button) findViewById(R.id.buttonMensuales);
		Button buttonAnuales = (Button) findViewById(R.id.buttonAnuales);
		Button buttonTrimestrales = (Button) findViewById(R.id.buttonTrimestrales);
	
		if (flagTiempo==1){
			
			Drawable d1 = buttonMensuales.getBackground();
	        PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	        d1.setColorFilter(filter);
			
			
			Drawable d2 = buttonAnuales.getBackground();
	        findViewById(R.id.buttonAnuales).invalidateDrawable(d2);
	        d2.clearColorFilter();
			
	        Drawable d3 = buttonTrimestrales.getBackground();
	        findViewById(R.id.buttonTrimestrales).invalidateDrawable(d3);
	        d3.clearColorFilter();
			
		}
		if (flagTiempo==3){
			Drawable d1 = buttonAnuales.getBackground();
	        PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	        d1.setColorFilter(filter);
	
			
			Drawable d2 = buttonMensuales.getBackground();
	        findViewById(R.id.buttonMensuales).invalidateDrawable(d2);
	        d2.clearColorFilter();
			
	        Drawable d3 = buttonTrimestrales.getBackground();
	        findViewById(R.id.buttonTrimestrales).invalidateDrawable(d3);
	        d3.clearColorFilter();
	
		
		}
		if (flagTiempo==2) {
			Drawable d1 = buttonTrimestrales.getBackground();
	        PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
	        d1.setColorFilter(filter);
	
			
			Drawable d2 = buttonMensuales.getBackground();
	        findViewById(R.id.buttonMensuales).invalidateDrawable(d2);
	        d2.clearColorFilter();
			
	        Drawable d3 = buttonAnuales.getBackground();
	        findViewById(R.id.buttonAnuales).invalidateDrawable(d3);
	        d3.clearColorFilter();
		}
	}
	
	/*** COLOR TIEMPO ***/
	public void establecerColorTiempo(View view)
	{		
		Button buttonMensuales = (Button) findViewById(R.id.buttonMensuales);
		Button buttonAnuales = (Button) findViewById(R.id.buttonAnuales);
		Button buttonTrimestrales = (Button) findViewById(R.id.buttonTrimestrales);
		
		if (buttonMensuales.isPressed()) flagTiempo=1;
		else if (buttonAnuales.isPressed()) flagTiempo=3;
		else if (buttonTrimestrales.isPressed()) flagTiempo=2;
		setColorTiempo();
	}
	
	public void setColorUbicacion()
	{
		Button buttonLima = (Button) findViewById(R.id.buttonLima);
		Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);
		
        if (flagLima == 1) {
        		
        	Drawable d1 = buttonLima.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
    	}
    	else{
    		Drawable d2 = buttonLima.getBackground();
            findViewById(R.id.buttonLima).invalidateDrawable(d2);
            d2.clearColorFilter();
    	}

		if(flagProvincia==1){
			Drawable d1 = buttonProvincia.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
		}
		else{
			Drawable d2 = buttonProvincia.getBackground();
            findViewById(R.id.buttonProvincia).invalidateDrawable(d2);
            d2.clearColorFilter();
		}
	}
	
	public void establecerColorUbicacion(View view)
	{
		Button buttonLima = (Button) findViewById(R.id.buttonLima);
		Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);
        if (buttonLima.isPressed()){if (flagLima == 0)  flagLima=1; else flagLima=0;}
		if (buttonProvincia.isPressed()){if(flagProvincia==0) flagProvincia=1; else flagProvincia=0;}
		setColorUbicacion();   
	}
	
	/*** COLOR DE LOS NIVELES **/
	public void setColorNivel()
	{
		Button buttonCanal = (Button) findViewById(R.id.buttonCanal);
		Button buttonGenero = (Button) findViewById(R.id.buttonGenero);
		Button buttonPromotor = (Button) findViewById(R.id.buttonPromotor);
		Button buttonEdad = (Button) findViewById(R.id.buttonEdad);
		Button buttonTipoEvento = (Button) findViewById(R.id.buttonTipoEvento);
		Button buttonDistrito = (Button) findViewById(R.id.buttonDistrito);
	
		if (flagNivel == 1)
		{
			Drawable d1 = buttonPromotor.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
    	}else
		{
			Drawable d1 = buttonPromotor.getBackground();
            findViewById(R.id.buttonPromotor).invalidateDrawable(d1);
            d1.clearColorFilter();
		}
		
		if (flagNivel == 2)
		{
			Drawable d1 = buttonTipoEvento.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
        }else
        {
        	Drawable d1 = buttonTipoEvento.getBackground();
            findViewById(R.id.buttonTipoEvento).invalidateDrawable(d1);
            d1.clearColorFilter();
		}
		
		if (flagNivel == 3)
		{
			Drawable d1 = buttonEdad.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
    	}else
    	{
    		Drawable d1 = buttonEdad.getBackground();
            findViewById(R.id.buttonEdad).invalidateDrawable(d1);
            d1.clearColorFilter();
        }
		
		if (flagNivel == 4)
		{
			Drawable d1 = buttonCanal.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
        }else
        {
        	Drawable d1 = buttonCanal.getBackground();
            findViewById(R.id.buttonCanal).invalidateDrawable(d1);
            d1.clearColorFilter();
        }

		if (flagNivel == 5)
		{
			Drawable d1 = buttonGenero.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
        }else
        {
        	Drawable d1 = buttonGenero.getBackground();
            findViewById(R.id.buttonGenero).invalidateDrawable(d1);
            d1.clearColorFilter();
        }

		if (flagNivel == 6)
		{
			Drawable d1 = buttonDistrito.getBackground();
            PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
            d1.setColorFilter(filter);
        }else
        {
        	Drawable d1 = buttonDistrito.getBackground();
            findViewById(R.id.buttonDistrito).invalidateDrawable(d1);
            d1.clearColorFilter();
        }
	}
	
	public void establecerSegundoNivel(View view)
	{
		Button buttonCanal = (Button) findViewById(R.id.buttonCanal);
		Button buttonGenero = (Button) findViewById(R.id.buttonGenero);
		Button buttonPromotor = (Button) findViewById(R.id.buttonPromotor);
		Button buttonEdad = (Button) findViewById(R.id.buttonEdad);
		Button buttonTipoEvento = (Button) findViewById(R.id.buttonTipoEvento);
		Button buttonDistrito = (Button) findViewById(R.id.buttonDistrito);
		
		Button buttonProvincia = (Button) findViewById(R.id.buttonProvincia);
		buttonProvincia.setEnabled(true);
		//flagProvincia=0;
		
		if (buttonCanal.isPressed())if (flagNivel == 4) flagNivel=0; else flagNivel=4;
		else if (buttonGenero.isPressed()) if (flagNivel == 5) flagNivel=0; else flagNivel=5;
		else if (buttonPromotor.isPressed()) if (flagNivel == 1) flagNivel=0; else flagNivel=1;
		else if (buttonTipoEvento.isPressed()) if (flagNivel == 2) flagNivel=0; else flagNivel=2;
		else if (buttonEdad.isPressed()) if (flagNivel == 3) flagNivel=0; else flagNivel=3;
		else if (buttonDistrito.isPressed()) {
			if (flagNivel == 6) flagNivel=0; 
			else {
				buttonProvincia.setEnabled(false);
				flagProvincia=0;
				flagNivel=6;
			}
		}
		
		setColorNivel();
		setColorUbicacion();
	}
	
	private void incializaFecha() 
	{
		pickDateInicio = (Button) findViewById(R.id.ButtonInicio);
		pickDateInicio.setOnClickListener(new View.OnClickListener() {
		            public void onClick(View v) {
		                showDialog(DATE_DIALOG_Inicial);
		            }
		        });
		
		fechaInicio = (TextView) findViewById(R.id.fechaInicio);
		fechaInicio.setText("Fecha Inicio: " + diaInicio + "/"+ (mesInicio +1) + "/"+ anhoInicio);

		pickDateFin = (Button) findViewById(R.id.ButtonFin);
 
		pickDateFin.setOnClickListener(new View.OnClickListener() {
		            public void onClick(View v) {
		                showDialog(DATE_DIALOG_Final);
		            }
		        });
		
		fechaFin = (TextView) findViewById(R.id.fechaFin);
		fechaFin.setText("Fecha Fin: " + diaFin + "/"+ (mesFin +1) + "/"+ anhoFin);
	}
	
	/*** FECHAS ***/
	protected Dialog onCreateDialog(int id) {
		   switch (id) {
		   case DATE_DIALOG_Inicial:
		    DatePickerDialog dialogoInicio =new DatePickerDialog(this,
		                    mDateSetListenerInicio, anhoInicio, mesInicio, diaInicio);
		    
		    dialogoInicio.getDatePicker();
			   
		    return dialogoInicio;
		    
		   case DATE_DIALOG_Final:
			    DatePickerDialog dialogoFin =new DatePickerDialog(this,
			                    mDateSetListenerFin, anhoFin, mesFin, diaFin);
			    
			    dialogoFin.getDatePicker();
		   
		    return dialogoFin;
		   }
		   return null;
	}
	
	/*** FECHA INICIO ***/
	private DatePickerDialog.OnDateSetListener mDateSetListenerInicio = new DatePickerDialog.OnDateSetListener()
		{
			public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
			{
				anhoInicio = year;
				mesInicio = monthOfYear;
				diaInicio = dayOfMonth;
				fechaInicio = (TextView) findViewById(R.id.fechaInicio);
				fechaInicio.setText("Fecha Inicio: " + diaInicio + "/"+ (mesInicio + 1) + "/"+ anhoInicio);
			}
		};
	
	/*** FECHA FIN ***/
	private DatePickerDialog.OnDateSetListener mDateSetListenerFin = new DatePickerDialog.OnDateSetListener()
	{
		public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
		{
			anhoFin = year;
			mesFin = monthOfYear;
			diaFin = dayOfMonth;
			fechaFin = (TextView) findViewById(R.id.fechaFin);
			fechaFin.setText("Fecha Fin: " + diaFin + "/"+ (mesFin + 1) + "/"+ anhoFin);
		}
	};
	
	/*** DIALOGO ***/
	private void crearDialog()
	{
		tipoNivel = new AlertDialog.Builder(this);
		tipoNivel.setTitle("Ventas por Canal");
		tipoNivel.setMessage("Seleccione por que tipo de informacion que desea mostrar la siguiente gráfica");
		//tipoNivel.setCancelable(true);

		tipoNivel.setPositiveButton("Por Tipo de Evento", new DialogInterface.OnClickListener()
		{ 
			public void onClick(DialogInterface dialog, int id) 
			{ 
				Venta_Canal.this.incializaFlags(CANAL_N3);
				intCanalN3.putExtra("tipoNivel3", 1);
				intCanalN3.putExtra("canal",canal);
				intCanalN3.putExtra("periodo",periodo);
				intCanalN3.putExtra("idcanal",idcanal);
				
				intCanalN3.putExtra("nombreUser", nombreUser);
				intCanalN3.putExtra("idperfil", idperfil);
				intCanalN3.putExtra("idUsuario", idUsuario);
				startActivity(intCanalN3);
			}
		});
		
		tipoNivel.setNeutralButton("Por Rango de Edades", new DialogInterface.OnClickListener()
		{ 
			public void onClick(DialogInterface dialog, int id) 
			{
				Venta_Canal.this.incializaFlags(CANAL_N3);
				intCanalN3.putExtra("tipoNivel3", 2);
				intCanalN3.putExtra("canal",canal);
				intCanalN3.putExtra("periodo",periodo);
				intCanalN3.putExtra("idcanal",idcanal);
				
				intCanalN3.putExtra("nombreUser", nombreUser);
				intCanalN3.putExtra("idperfil", idperfil);
				intCanalN3.putExtra("idUsuario", idUsuario);
				startActivity(intCanalN3);
			}
		});
		
		tipoNivel.setNegativeButton("Por Genero", new DialogInterface.OnClickListener()
		{ 
			public void onClick(DialogInterface dialog, int id) 
			{ 
				Venta_Canal.this.incializaFlags(CANAL_N3);
				intCanalN3.putExtra("tipoNivel3", 3);
				intCanalN3.putExtra("canal",canal);
				intCanalN3.putExtra("periodo",periodo);
				intCanalN3.putExtra("idcanal",idcanal);
				
				intCanalN3.putExtra("nombreUser", nombreUser);
				intCanalN3.putExtra("idperfil", idperfil);
				intCanalN3.putExtra("idUsuario", idUsuario);
				startActivity(intCanalN3);
			}
		});

		tipoNivel.create();
	}
	
	/*** INICIALIZA FLAG DEL INTENT ***/
	private void inicializaFlagCanal()
	{
		flagGenerarReporte = this.getIntent().getExtras().getInt("flagGenerarReporte");
		flagLima= this.getIntent().getExtras().getInt("flagLima");
		flagProvincia= this.getIntent().getExtras().getInt("flagProvincia");
		flagNivel= this.getIntent().getExtras().getInt("flagNivel");
		flagTiempo= this.getIntent().getExtras().getInt("flagTiempo");
		
		anhoInicio= this.getIntent().getExtras().getInt("anhoInicio");
		mesInicio= this.getIntent().getExtras().getInt("mesInicio");
		diaInicio= this.getIntent().getExtras().getInt("diaInicio");
		
		diaFin= this.getIntent().getExtras().getInt("diaFin");
		mesFin= this.getIntent().getExtras().getInt("mesFin");
		anhoFin= this.getIntent().getExtras().getInt("anhoFin");
	}
	
	/*** FLAGS ***/
	private void incializaFlags(int intent)
	{
		Intent intVenta = null;
		switch(intent)
		{
			case CANAL_N3:
				intCanalN3 = new Intent(Venta_Canal.this,Venta_Canal_Nivel3.class); //Se usa para inicializar para toda la clase
				intVenta = intCanalN3;
				break;
			
			case CANAL_N2:
				Intent intCanal = this.getIntent(); //Solo para actualizar esta misma clase
				intVenta = intCanal;
				break;
				
			case VENTAS_GENERALES:
				intVentasGenerales = new Intent(Venta_Canal.this,VentasGenerales.class);
				intVenta = intVentasGenerales;
				break;
				
			case TIPO_EVENTO:
				intTipoEvento = new Intent(Venta_Canal.this,Venta_TipoEvento.class);
				intVenta = intTipoEvento;
				break;
				
			case EDAD:
				intEdad = new Intent(Venta_Canal.this, Venta_Edad.class);
				intVenta = intEdad;
				break;
				
			case PROMOTOR:
				intPromotor = new Intent(Venta_Canal.this, Venta_Promotor.class);
				intVenta = intPromotor;
				break;
			
			case GENERO:
				intGenero = new Intent(Venta_Canal.this, Venta_Genero.class);
				intVenta = intGenero;
				break;
				
			case DISTRITO:
				intDistrito = new Intent(Venta_Canal.this, Venta_Distrito.class);
				intVenta = intDistrito;
				break;
		}
		
		intVenta.putExtra("flagLima", flagLima);
		intVenta.putExtra("flagProvincia", flagProvincia);
		intVenta.putExtra("flagNivel", flagNivel);
		intVenta.putExtra("flagTiempo", flagTiempo);
		intVenta.putExtra("anhoInicio", anhoInicio);
		intVenta.putExtra("mesInicio", mesInicio);
		intVenta.putExtra("diaInicio", diaInicio);
		intVenta.putExtra("anhoFin", anhoFin);
		intVenta.putExtra("mesFin", mesFin);
		intVenta.putExtra("diaFin", diaFin);
		intVenta.putExtra("flagGenerarReporte", 1);
		
		intVenta.putExtra("nombreUser", nombreUser);
		intVenta.putExtra("idperfil", idperfil);
		intVenta.putExtra("idUsuario", idUsuario);
	}
	
	@Override
    public boolean onCreateOptionsMenu(Menu menu)
	{
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menuprincipal, menu);
        return true;
    }
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) 
	{
	    // Handle item selection
	    switch (item.getItemId()) {
	        case R.id.logout:
	        	Intent logo = new Intent(this,login.class);
	        	startActivity(logo);
	            return true;
	        case android.R.id.home:
	        	muestraPanel();
	            return true;
	        case R.id.menuPrincipal:
	        	Intent menu = new Intent(this,com.Generales.Menu.class);
	        		        	
	        	menu.putExtra("codigo","");
	        	menu.putExtra("nombreUser",nombreUser);
	        	menu.putExtra("idPromotor",idUsuario);
	        	menu.putExtra("idperfil", idperfil);
	        	startActivity(menu);
	            return true;
	        default:
	            return super.onOptionsItemSelected(item);
	    }
	}	
}

